import { CaseData, UserStats } from './types';

// 案件服务类，负责提供案件数据和相关操作
export class CaseService {
  // 模拟的案件数据库
  private static mockCases: Map<string, CaseData> = new Map([
    [
      'case1',
      {
        id: 'case1',
        title: '神秘公寓凶杀案',
        description: '在一家高级公寓中，一名年轻女子被发现死在自己的公寓里...',
        difficulty: '中等',
        status: '未开始',
        background: '2023年10月15日晚10点，警方接到报警电话，称在市中心的豪华公寓"明珠大厦"802室发现一名年轻女性的尸体。受害者是该公寓的住户，28岁的白领林小姐。初步调查显示，受害者是被钝器击打头部致死，死亡时间大约在当晚8点至9点之间。房间有明显的打斗痕迹，但没有强行闯入的迹象。目前警方已经锁定了几位嫌疑人，需要进一步调查取证。',
        victim: {
          name: '林小姐',
          age: 28,
          occupation: '金融分析师',
          causeOfDeath: '头部钝器击打',
          timeOfDeath: '2023年10月15日晚8点至9点'
        },
        suspects: [
          {
            id: 'suspect1',
            name: '张先生',
            age: 32,
            occupation: '软件工程师',
            relationToVictim: '前男友',
            description: '与受害者交往两年，三个月前分手，但最近频繁联系受害者试图复合。',
            isGuilty: false
          },
          {
            id: 'suspect2',
            name: '李女士',
            age: 35,
            occupation: '公寓管理员',
            relationToVictim: '邻居',
            description: '负责管理明珠大厦，有所有住户的钥匙。据其他住户反映，她与受害者关系不佳。',
            isGuilty: false
          },
          {
            id: 'suspect3',
            name: '王先生',
            age: 40,
            occupation: '投资者',
            relationToVictim: '客户',
            description: '是受害者所在公司的重要客户，经常与受害者有业务往来。',
            isGuilty: true
          }
        ],
        clues: [
          {
            id: 'clue1',
            description: '现场发现了一个带有血迹的黄铜台灯，可能是凶器。',
            type: '物证',
            isKey: true
          },
          {
            id: 'clue2',
            description: '受害者的手机显示，案发当晚8点30分，她曾给某人发过一条短信。',
            type: '物证',
            isKey: false
          }
        ]
      }
    ],
    [
      'case2',
      {
        id: 'case2',
        title: '消失的艺术品',
        description: '博物馆中一件价值连城的艺术品在展出期间神秘消失...',
        difficulty: '困难',
        status: '未开始',
        background: '2023年11月5日，市立博物馆正在举办"世界珍宝展"，展出了来自世界各地的珍贵艺术品。然而，在展览的第三天早上，工作人员发现其中最珍贵的展品——一幅17世纪的油画"月夜"神秘失踪了。监控录像显示，当晚12点至凌晨2点之间，监控系统出现了故障，没有记录任何画面。馆方已经报案，并配合警方展开调查。',
        suspects: [
          {
            id: 'suspect4',
            name: '刘馆长',
            age: 55,
            occupation: '博物馆馆长',
            relationToVictim: '管理者',
            description: '负责整个展览的策划和安保工作，对博物馆的布局和安保系统非常熟悉。',
            isGuilty: false
          },
          {
            id: 'suspect5',
            name: '陈保安',
            age: 38,
            occupation: '夜班保安',
            relationToVictim: '安保人员',
            description: '案发当晚负责值班，是最后一个见到画作的人。',
            isGuilty: true
          },
          {
            id: 'suspect6',
            name: '赵教授',
            age: 60,
            occupation: '艺术史教授',
            relationToVictim: '顾问',
            description: '是本次展览的学术顾问，对这幅画作有深入研究，多次表示这是他最喜欢的作品。',
            isGuilty: false
          }
        ],
        clues: [
          {
            id: 'clue3',
            description: '展厅的窗户被打开，窗台上发现了泥土痕迹。',
            type: '物证',
            isKey: false
          },
          {
            id: 'clue4',
            description: '安保系统的日志显示，有人在当晚11点50分远程登录了系统。',
            type: '物证',
            isKey: true
          }
        ]
      }
    ],
    [
      'case3',
      {
        id: 'case3',
        title: '公司机密泄露案',
        description: '一家科技公司的核心技术机密被泄露给竞争对手...',
        difficulty: '简单',
        status: '未开始',
        background: '2023年12月1日，科技巨头"未来科技"公司发现其最新研发的人工智能芯片设计图纸被泄露给了竞争对手"星辰科技"。这一泄露可能导致公司损失数亿元的研发投入和市场份额。公司内部调查显示，机密文件是从公司内网流出的，但具体泄露方式尚不明确。公司高层决定聘请私人侦探协助调查。',
        suspects: [
          {
            id: 'suspect7',
            name: '郑总监',
            age: 45,
            occupation: '研发总监',
            relationToVictim: '负责人',
            description: '负责该芯片项目的研发工作，拥有最高级别的访问权限。',
            isGuilty: false
          },
          {
            id: 'suspect8',
            name: '孙工程师',
            age: 30,
            occupation: '软件工程师',
            relationToVictim: '研发人员',
            description: '参与了芯片的软件部分开发，最近因为薪资问题与公司产生纠纷。',
            isGuilty: true
          },
          {
            id: 'suspect9',
            name: '周助理',
            age: 28,
            occupation: '总经理助理',
            relationToVictim: '管理层',
            description: '负责公司内部文件的流转和管理，有机会接触到各种机密文件。',
            isGuilty: false
          }
        ],
        clues: [
          {
            id: 'clue5',
            description: '服务器日志显示，有人在11月30日晚上10点下载了完整的芯片设计图纸。',
            type: '物证',
            isKey: true
          },
          {
            id: 'clue6',
            description: '公司内部邮件系统显示，孙工程师在案发前一周曾多次与星辰科技的HR联系。',
            type: '物证',
            isKey: true
          }
        ]
      }
    ]
  ]);

  // 获取案件列表
  public static getCaseList(): CaseData[] {
    const cases: CaseData[] = [];
    this.mockCases.forEach((caseData) => {
      // 返回简化版的案件信息，不包含详细内容
      cases.push({
        id: caseData.id,
        title: caseData.title,
        description: caseData.description,
        difficulty: caseData.difficulty,
        status: caseData.status
      });
    });
    return cases;
  }

  // 获取案件详情
  public static getCaseDetail(caseId: string): CaseData | undefined {
    return this.mockCases.get(caseId);
  }

  // 更新案件状态
  public static updateCaseStatus(caseId: string, status: string): boolean {
    const caseData = this.mockCases.get(caseId);
    if (caseData) {
      caseData.status = status;
      this.mockCases.set(caseId, caseData);
      return true;
    }
    return false;
  }

  // 保存用户统计数据
  public static saveUserStats(stats: UserStats): void {
    // 在实际应用中，这里应该将数据保存到本地存储
    console.log('保存用户统计数据: ' + JSON.stringify(stats));
  }

  // 获取用户统计数据
  public static getUserStats(): UserStats {
    // 在实际应用中，这里应该从本地存储读取数据
    // 返回模拟数据
    return {
      totalCases: 3,
      solvedCases: 0,
      successRate: 0
    };
  }

  // 提交破案结果
  public static submitCaseResult(caseId: string, isCorrect: boolean): void {
    // 更新案件状态
    this.updateCaseStatus(caseId, isCorrect ? '已解决' : '未解决');
    
    // 更新用户统计数据
    const stats = this.getUserStats();
    if (isCorrect) {
      stats.solvedCases += 1;
    }
    stats.successRate = stats.totalCases > 0 ? Math.round((stats.solvedCases / stats.totalCases) * 100) : 0;
    this.saveUserStats(stats);
  }
}